console.log(typeof null); //object

在 JavaScript 中， typeof null 的结果是 object， 该结果错误地暗示了 null 是一个对象
	(null 并不是一个对象， 而是一个基本数据类型(的值)， 这其实是一个 bug， 但更糟的是这个 bug 是不能修复的， 因为修复这个 bug 会使已经存在的程序崩溃。 下面就让我们探索一下这个 bug 的历史。

		typeof null 这个 bug 是 JavaScript 第一个版本遗留下来的。 在这个版本中， 所有值都存储在 32 位的单元中， 每个单元包含一个小的 ** 类型标签(1 - 3 bits) **
		以及当前要存储值的真实数据。 类型标签存储在每个单元的低位中， 共有五种数据类型：

		在 JavaScript 第一个版本中, 所有值都存储在 32 位的单元中,
		每个单元包含一个小的类型标签(1 - 3 bits) 以及当前要存储值的真实数据。 类型标签存储在每个单元的低位中, 共有五种数据类型:

		000: object - 当前存储的数据指向一个对象。 1: int - 当前存储的数据是一个 31 位的有符号整数。 010: double - 当前存储的数据指向一个双精度的浮点数。 100: string -
		当前存储的数据指向一个字符串。 110: boolean - 当前存储的数据是布尔值。

		如果最低位是 1, 则类型标签标志位的长度只有一位; 如果最低位是 0, 则类型标签标志位的长度占三位, 为存储其他四种数据类型提供了额外两个 bit 的长度。

		有两种特殊数据类型:
		undefined 的值是(-2) 30(一个超出整数范围的数字) null 的值是机器码 NULL 指针(null 指针的值全是 0) 那也就是说 null 的类型标签也是 000， 和 Object 的类型标签一样,
		所以会被判定为 Object。

		现在可以很明显地知道为什么 typeof 操作符会认为 null 是对象了： typeof 操作符检测 null 的类型标签位时发现是 000(
			存放机器码 NULL 指针的存储单元中的所有数据位都是 0， 所以低三位也是 0)
